// 给定一个函数 fn ，它返回一个新的函数，返回的函数与原始函数完全相同，只不过它确保 fn 最多被调用一次。
//
// 第一次调用返回的函数时，它应该返回与 fn 相同的结果。
// 第一次后的每次调用，它应该返回 undefined 。
//
// 来源：力扣（LeetCode）
// 链接：https://leetcode.cn/problems/allow-one-function-call
// 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
/**
 * @param {Function} fn
 * @return {Function}
 */
var once = function (fn) {
  let flag = false
  return function (...args) {
    if (!flag) {
      flag = true
      return fn(...args)
    }
  }
}

let fn = (a, b, c) => (a + b + c)
let onceFn = once(fn)

console.log(
  onceFn(1, 2, 3) // 6
)
console.log(
  onceFn(2, 3, 6) // returns undefined without calling fn
)
